# This Python file uses the following encoding: utf-8
from paddleocr import PaddleOCR
import re

need_name = ['求职意向', '教育背景', '实习经验', '工作经验', '项目经验', '个人技能', '技能证书', '技能特长',
             '技能专长',
             '兴趣爱好', '校园活动', '自我评价', '荣誉奖项', '奖项荣誉']


def extract_text_from_image(image_path):
    ocr = PaddleOCR(use_angle_cls=True, use_gpu=False)  # 使用CPU预加载，不用GPU
    result = ocr.ocr(image_path, cls=True)  # 打开图片文件
    # 打印所有文本信息
    text = []
    for t in result:
        for k in t:
            text.append(k[1][0])

    return text


def get_xueli(original_list, substrings_to_check):
    """
    从文本中得到学历
    :param original_list:提取的文本列表
    :param substrings_to_check:检查的文本列表
    :return:对应的学历
    """
    matched_substrings = set()
    for item in original_list:
        for substring in substrings_to_check:
            if substring in item and substring not in matched_substrings:
                matched_substrings.add(substring)
    if "博士" in matched_substrings:
        return "博士"
    elif {"硕士", "研究生"}.issubset(matched_substrings):
        return "硕士"
    elif "本科" in matched_substrings:
        return "本科"
    elif "大专" in matched_substrings:
        return "大专"
    else:
        return "无学历"





def get_xingxi(text_list):
    result =text_list

    book_i = []
    name_i = []
    for i in range(len(result)):
        if result[i] in need_name:
            book_i.append(i)
            name_i.append(result[i])
    use = {}
    for j in range(len(book_i) - 1):
        use[result[book_i[j]]] = []
        for i in range(book_i[j], book_i[j + 1]):
            use[result[book_i[j]]].append(result[i])
    use[result[book_i[len(book_i) - 1]]] = []
    for i in range(book_i[len(book_i) - 1], len(result)):
        use[result[book_i[len(book_i) - 1]]].append(result[i])

    return use, need_name


def get_values(use, name_i):
    values = ['无学历', 0, 0, 0, 0, 0]
    for i in range(len(name_i)):
        if name_i[i] in use.keys():
            if i == 2 or i == 3 or i == 4:
                pattern = re.compile(r'\d{4}\.\d{1,2}-(?:(?:\d{4}\.\d{1,2})|至今)')
                for item in use[name_i[i]]:
                    if pattern.match(item):
                        values[1] += 1
            if i == 5 or i == 6 or i == 7 or i == 8:
                add_zhi = len(use[name_i[i]])
                values[3] = values[3] + add_zhi
            if i == 12 or i == 13:
                add_zhi = len(use[name_i[i]])
                values[4] = values[4] + add_zhi
            if i == 1:
                try:
                    re1 = [item for item in use[name_i[i]] if 'GPA' in item]
                    zhi = re1[0][3:]
                    values[2] = eval(zhi)
                except Exception as e:
                    pass
                xueli = get_xueli(use[name_i[i]], ['本科', '大专', '研究生', '硕士', '博士'])
                values[0] = xueli
            if i == 11:
                add_zhi = len(use[name_i[i]])
                values[5] = values[5] + add_zhi
    if values[0] == "博士":
        values[0] = 10
    elif values[0] == "硕士":
        values[0] = 7
    elif values[0] == "本科":
        values[0] = 4
    elif values[0] == "大专":
        values[0] = 1
    elif values[0] == "无学历":
        values[0] = 0
    values[1] = values[1] * 2 if values[1] * 2 <= 10 else 10
    values[2] = values[2] * 10
    values[3] = values[3] * 1.1 if values[3] * 1.2 <= 10 else 10
    values[4] = values[4] * 1.3 if values[4] * 1.4 <= 10 else 10
    values[5] = values[5] * 1.2 if values[5] * 1.3 <= 10 else 10

    return values

def get_result(text_list):
    """

    :param text_list: 简历信息列表
    :return: 结果值
    """
    use, name_i = get_xingxi(text_list)
    values=get_values(use, name_i)
    return values

if __name__ == '__main__':


    text_list =['五百丁', '一句话介绍自己，告诉HR为什么选择你而不是别人', '求职意向', '网络测试专员', '22岁', '教育背景', '汉族', '2013.09-2017.07', '五百丁大学', '网络工程专业', '广东广州', '13800138000', '工作经验', 'bd@500d.me', '2016.06-至今', '五百丁技术有限公司', '测试专员', '技能特长', '工作描述：', '编写数个有关电视节目高清度的测试用例，测试该用例测出所在环境能否', '创建、更新不同画质节目的', '功能及创建后能否在数据库中找到；', '·执行测试用例用来测试所在环境能否预定电视节目录制，录制后能播放、', '80%', '80%', '快进等功能。', 'Java', 'VC++', '项目经验', '2016.06-2016.08', '五百丁外包服务公司', '80%', '80%', '见习网络编辑', '工作描述：', 'MindManager', 'Visual Studio', '·负责网络管理、监控、维护的全流程支撑工作；', '·熟练掌握路由器的工作原理和装配方法；', '掌握思科各种互联设备的配置方法，自主安装并升级路由器操作系统。', '兴趣爱好', '2013.09-2015.06', '学生会办公室部门', '干事', '绘画', '唱歌', '游泳', '工作描述：', '·负责学院公共物品的整理、统计工作；', '摄影', '·带领学生会其他成员学院各项晚会及活动拉赞助。', '荣誉奖项', '成绩排名：系前五名', 'GPA : 7.277/10', '英语水平：CET6', '奖学金：综合一等奖学金（1次）、综合二等奖学金（4次）', '自我评价', '计算机网络工程专业毕业，有较丰富的网络测试经验，对移动互联网有着强烈']
    values=get_result(text_list)
    print(values)

